/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
Universidad del Valle de Guatemala
Algoritmos y Estructura de Datos
Luis Ernesto Orozco Godinez
CarnÈ:10382
14 de Julio del 2011
Hoja de Trabajo #1
Clase: DriverRadio
 * Descripcion: Esta clase contendra el main del programa, tambien tiene un menu con la opciones para
 * mostrarle al usuario al momento de correrlo.
*/

package hoja1;

/**
 *
 * @author luisorozco
 */

// se importan las bibliotecas que se utilizaran
import java.lang.RuntimeException;
import java.util.Scanner;
import java.util.InputMismatchException;
import java.text.DecimalFormat;

public class DriverRadio {

    /**
     * @param args the command line arguments
     */
    
    // se crea el main de nuestro programa
    public static void main(String[] args) {
       
        // se crean algunas variables que se utilizaran en la clase
        int opcion,num;
        
        // se crea un objeto de la clase donde estan nuestros metodos y la llamamos radio
        Hoja1 radio = new Hoja1();
        Scanner ingreso = new Scanner(System.in);
        int boton=0;
        
        // se hace un menu con un ciclo do y adentro de este ira un switch-case
        do{
            menu();
            
            // se imprimer el toString de la clase Hoja1
            System.out.println(radio);
            //-----------------------------------------------------
            opcion = (int)obtenerNumero("Ingrese su opcion: ", false);
 
            //-----------------------------------------------------
            // se crea el switch el cual tendra las opciones de nuetro menu
            switch(opcion){
                // en la opcion 1 ira el metodo power instanciado por el objeto radio
                case 1:
                    radio.power();
                    break;
                // en la opcion 2 ira el metodo cambio instanciado por el objeto radio
                case 2:
                    
                    radio.cambio();
                    break;
                // en la opcion 3 ira el cambio hacia adelante que se quiera hacer en la emisora
                case 3:
                    
                    radio.fw();
                    break;
                 // en la opcion 4 ira el cambio de "reversa"que se quiera hacer en la emisora
                case 4:
                    radio.bw();
                    break;
                // en la opcion 5 ira el metodo guardar, para almacenar una estacion en alguno de los 12 botones
                case 5:
                    System.out.println("En que Boton quiere guardar la estacion actual  (solo del 1 al 12)?: ");
                    boton=ingreso.nextInt();
                    radio.store(boton);// se envia el parametro boton, el cual es esperado por el metodo store
                    break;
                // en la opcion 6 ira el metodo seleccionar el cual obtendra la estacion que se guardo
                case 6:
                     System.out.println("En que Boton quiere guardo la estacion  (solo del 1 al 12)?: ");
                    boton=ingreso.nextInt();
                    radio.select(boton);// se envia el parametro boton, el cual es esperado por el metodo store
                    break;
                 // en la estacion 7 ira el metodo salir
                case 7:
                    radio.salir();
                    break;
                // y el default se usa cuando no se manda una opcion que tiene el menu
                default:
                    System.out.println("\nERROR: ~~> Opcion invalida. :O(\n");            
            }
        }
        while(opcion!=7);
    }
        
        // se crea un metodo menu el cual imprimira la opciones que el menu tiene disponibles
         public static void menu(){
        System.out.println();
        System.out.println("+--------           MENU DE OPCIONES       ----------+");
        System.out.println("| 1. Prender la Radio                                |");
        System.out.println("| 2. Cambia de AM a FM a AM                          |");
        System.out.println("| 3. Avanzar en el dial de las emisoras              |");
        System.out.println("| 4. Retroceder en el dial de las emisoras           |");
        System.out.println("| 5. Guardar una emisora                             |");
        System.out.println("| 6. Seleccionar la emisora                          |");
        System.out.println("| 7.  Apagar el radio                                |");
        System.out.println("+----------------------------------------------------+");
    }
         
         // se crea un metodo para la programacion defensiva, para utilizarlo en el menu
        public static double obtenerNumero(String mensaje, boolean mostrar){
        Scanner ingreso = new Scanner(System.in);
        double num = -1;// se crea una variable que se utlizara en el metodo
        
        System.out.print(mensaje);
        try{
            num = ingreso.nextDouble();
        }
        catch(InputMismatchException exception){
            if (mostrar)
                System.out.println("\nERROR: ~~> Dato invalido. :O(\n");// envia error si no es dato deseado
        }
        finally{
            ingreso.nextLine();//Atrapar el ENTER
        }
        return num;
    }
        
    }

